#include <stdio.h>
// 2数组求和方法.c
int handle_arr_sum(int *arr, int n)
{
    int sum = 0;
    for (size_t i = 0; i < n; i++)
    {
        sum = sum + arr[i];
    }
    printf("和为:%d\n", sum);
}
// 这里形参int *arr和int arr[]都可以，本质上都是指针变量
int sort(int arr[], int n)
{
    printf("冒泡\n");
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = i; j < n; j++)
        {
            if (arr[i] < arr[j])
            {
                printf("交换位置\n");
                int tem = arr[i];
                arr[i] = arr[j];
                arr[j] = tem;
            }
        }
    }

    for (size_t k = 0; k < n; k++)
    {
        printf("%d\t", arr[k]);
    }
    printf("\n");
}
// 插入排序
int insertSort(int arr[], int n)
{
    printf("插入排序\n");
    // 从数组的第二个元素开始遍历（索引为1），因为第一个元素默认已排序
    for (int i = 1; i < n; i++)
    {
        // 记录当前要插入已排序部分的元素值
        int key = arr[i];
        // 初始化j为当前元素的前一个索引，即已排序部分的最后一个元素的索引
        int j = i - 1;
        // 从已排序数据的末尾开始向前遍历，为当前元素找到插入位置
        // 循环条件：j >= 0（确保不越界）且arr[j] > key（找到比key小的元素或遍历完）
        while (j >= 0 && arr[j] > key)
        {
            // 将比key大的元素向后移动一位，为key腾出空间
            arr[j + 1] = arr[j];
            // j向前移动一位，继续比较前一个元素
            j = j - 1;
        }
        // 当找到插入位置或遍历完已排序部分后，将key插入到该位置
        arr[j + 1] = key;
    }

    for (size_t k = 0; k < n; k++)
    {
        printf("%d\t", arr[k]);
    }
    printf("\n");
}
void insertSortMy(int *arr, int n)
{
    for (size_t i = 1; i < n; i++)
    {
        for (size_t j = 0; j < i; j++)
        {

            int tem = arr[i]; // 要插入的数
            if (arr[i] < arr[j])
            {
                printf("%d,%d\n", arr[i], arr[j]);
                arr[i] = arr[j];
                arr[j] = tem;
            }
        }
    }
    for (size_t k = 0; k < n; k++)
    {
        printf("%d\t", arr[k]);
    }
    printf("\n");
}
void main()
{
    int arr[10] = {1, 2, 3, 45, 6, 7, 8, 9, 1, 3};
    handle_arr_sum(arr, sizeof(arr) / sizeof(int));
    insertSortMy(arr, sizeof(arr) / sizeof(int));
}